//公主成长记（不完全代码）
#include<iostream>
#include<algorithm>
#include<vector>
#include<iomanip>
#include<ctime>
#include<array>
#include<cstdlib>
#include<string.h>

using namespace std;
int main ()
{
    //1.为公主和教母取名
    // 2.为公主录入初始信息
    //   根据公主星座，设置基本参数（体力，智力，魅力，道德，气质）
    // 3.开始游戏大循环
    // 4.根据各项参数，判定游戏结果

    //教母的名字
    //string value_godmother_name;
    //公主的名字
    string value_princess_name;
    //公主的生日
    int value_birth_month;
    int value_birth_date;
    //公主的星座
    string value_princess_constell;
    string constell_name[12][2] =
        {
            {"山羊座", "水瓶座"}, // 一月
            {"水瓶座", "双鱼座"}, // 二月
            {"双鱼座", "白羊座"}, // 三月
            {"白羊座", "金牛座"}, // 四月
            {"金牛座", "双子座"}, // 五月
            {"双子座", "巨蟹座"}, // 六月
            {"巨蟹座", "狮子座"}, // 七月
            {"狮子座", "处女座"}, // 八月
            {"处女座", "天秤座"}, // 九月
            {"天秤座", "天蝎座"}, // 十月
            {"天蝎座", "射手座"}, // 十一月
            {"射手座", "山羊座"}, // 十二月
        };
    //各月份的跨星座日期
    int constell_dates[] {21, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22};
    //定义一些临时变量
    int choice, temp1, temp2, temp3;

    // 录入数据
    //cout << "教母的姓名：";
    //cin >> value_godmother_name;
    cout << "公主的姓名：";
    cin >> value_princess_name;
    cout << "公主的生日(month date):";
    cin >> value_birth_month >> value_birth_date;

    value_princess_constell = constell_name[value_birth_month - 1]
                              [value_birth_date / constell_dates[value_birth_month - 1]];
                              //生日日期/跨星座日期，0就是不到跨星座日期，为前一个星座，1就是后一个星座
    //cout << value_princess_constell << endl;

    // cout << "公主信息:";
    // cout << "姓名:" << value_princess_name << endl;
    // cout << "生日:1659-" << value_birth_month << "-" << value_birth_date << endl;
    // cout << "星座:" << value_princess_constell << endl;

    //公主五项基本信息：体力，智力，魅力，道德，气质
    //vector <int> value_vec_baseinfo;
    array <int, 5> value_array_baseinfo;
    array <string, 5> value_array_baseinfo_name {"体力", "智力", "魅力", "道德", "气质"};
    //初始化金币
    int value_gold = 500;

    //初始化属性值
    if (value_princess_constell == "白羊座")
    {
        value_array_baseinfo[0] = 80; value_array_baseinfo[1] = 15; value_array_baseinfo[2] = 15; value_array_baseinfo[3] = 11; value_array_baseinfo[4] = 21;
    }
    else if (value_princess_constell == "金牛座")
    {
        value_array_baseinfo[0] = 46; value_array_baseinfo[1] = 30; value_array_baseinfo[2] = 28; value_array_baseinfo[3] = 20; value_array_baseinfo[4] = 29;
    }
    else if (value_princess_constell == "双子座")
    {
        value_array_baseinfo[0] = 50; value_array_baseinfo[1] = 35; value_array_baseinfo[2] = 23; value_array_baseinfo[3] = 18; value_array_baseinfo[4] = 20;
    }
    else if (value_princess_constell == "巨蟹座")
    {
        value_array_baseinfo[0] = 40; value_array_baseinfo[1] = 31; value_array_baseinfo[2] = 33; value_array_baseinfo[3] = 17; value_array_baseinfo[4] = 33;
    }
    else if (value_princess_constell == "狮子座")
    {
        value_array_baseinfo[0] = 85; value_array_baseinfo[1] = 19; value_array_baseinfo[2] = 11; value_array_baseinfo[3] = 20; value_array_baseinfo[4] = 37;
    }
    else if (value_princess_constell == "处女座")
    {
        value_array_baseinfo[0] = 36; value_array_baseinfo[1] = 28; value_array_baseinfo[2] = 36; value_array_baseinfo[3] = 18; value_array_baseinfo[4] = 40;
    }
    else if (value_princess_constell == "天秤座")
    {
        value_array_baseinfo[0] = 42; value_array_baseinfo[1] = 33; value_array_baseinfo[2] = 25; value_array_baseinfo[3] = 32; value_array_baseinfo[4] = 28;
    }
    else if (value_princess_constell == "天蝎座")
    {
        value_array_baseinfo[0] = 50; value_array_baseinfo[1] = 25; value_array_baseinfo[2] = 40; value_array_baseinfo[3] = 18; value_array_baseinfo[4] = 17;
    }
    else if (value_princess_constell == "射手座")
    {
        value_array_baseinfo[0] = 57; value_array_baseinfo[1] = 31; value_array_baseinfo[2] = 15; value_array_baseinfo[3] = 19; value_array_baseinfo[4] = 20;
    }
    else if (value_princess_constell == "山羊座")
    {
        value_array_baseinfo[0] = 56; value_array_baseinfo[1] = 21; value_array_baseinfo[2] = 16; value_array_baseinfo[3] = 25; value_array_baseinfo[4] = 23;
    }
    else if (value_princess_constell == "水瓶座")
    {
        value_array_baseinfo[0] = 43; value_array_baseinfo[1] = 43; value_array_baseinfo[2] = 20; value_array_baseinfo[3] = 23; value_array_baseinfo[4] = 17;
    }
    else if (value_princess_constell == "双鱼座")
    {
        value_array_baseinfo[0] = 41; value_array_baseinfo[1] = 20; value_array_baseinfo[2] = 29; value_array_baseinfo[3] = 23; value_array_baseinfo[4] = 32;
    }
    // for (int i = 0; i < 5;i++)
    //     cout << value_array_baseinfo[i] << '\t';
    // cout << endl;

    //开始游戏循环
    //游戏从1670年生日月份（value_birth_month）开始，公主11岁，直到公主18岁截止；
    srand(time(NULL));
    for (int year = 1670; year <= 1670 + 7; year++)
    {
         for (int month = (year == 1670) ? value_birth_month : 1; month <= 2; )
         {
            
            //显示游戏主菜单
            ag:
            cout << "\n1.查看状态\n2.安排行程\n3.存档\n4.读档\n0.结束游戏" << endl;
            cin >> choice;
            switch(choice)
            {
                case 1://查看状态
                {   cout << "公主的信息：" << endl;
                    cout << "姓名:" << value_princess_name << endl;
                    cout << "生日:1659-" << value_birth_month << "-" << value_birth_date << endl;
                    cout << "星座:" << value_princess_constell << endl;
                    //打印核心属性
                    cout << left;
                    for (int i = 0; i < 5; i++)
                    {
                        cout << value_array_baseinfo_name[i] << ": " << setw(4) << value_array_baseinfo[i] ;
                        //计算实心框数量
                        int solidcount = value_array_baseinfo[i] / 10;
                        for (int j = 0; j < 10;j++)
                        {
                            if(j<solidcount)
                                cout << "♦︎";
                            else
                                cout << "♢";
                        }
                        cout << endl;
                    }
                    cout << "金币: " << setw(4) << value_gold << endl;
                    break;
                }
                case 2://安排行程，一个月最多安排三个行程
                {   
                    //判断是否是公主生日月
                    if(month==value_birth_month)
                    {
                        cout << "本月是" << value_princess_name << "的生日,要不要送礼物呢？(Y/N)" << endl;
                        char gift;
                        cin >> gift;
                        // 根据用户输入判断
                        if(gift=='Y')
                        {
                            value_gold += temp1 = rand() % 100;
                            cout << "金币+" << temp1 << endl;
                        }
                    }
                    string month_parts[] = {"上旬", "中旬", "下旬"};
                    for (int i = 0; i < 3; i++)
                    {
                        //提醒玩家月份
                        cout << "--" << month << "月" << month_parts[i] << "--"<<endl;
                        cout << "1.学习武艺\n2.学习文化\n3.学习礼法\n4.出城修行\n5.打工赚钱" << endl;
                        cout << "请选择：" << endl;
                        cin >> choice;
                        //这里要判断金币是否够，不够只能打工
                        if(value_gold<50)
                        {
                            again:
                            cout << "金币不够，先赚钱吧(5.打工赚钱 0.退出游戏）" << endl;
                            cin >> choice;
                            if(choice==0)
                                return 0;
                            else if(choice!=5)
                                goto again;
                        }
                        switch (choice)
                        {
                            case 1://学习武艺 +体力(0~9) +魅力(0~9) —金币(0~49) 
                                value_array_baseinfo[0] += temp1 = rand() % 10;
                                value_array_baseinfo[2] += temp2 = rand() % 10;
                                value_gold -= temp3 = rand() % 50;
                                cout << "冬练三九，夏练三伏！" << endl;
                                cout << "体力+" << temp1 << "\t魅力+" << temp2 << "\t金币-" << temp3 << endl;
                                break;
                            case 2://学习文化 +智力 +气质 -金币
                                value_array_baseinfo[1] += temp1 = rand() % 10;
                                value_array_baseinfo[4] += temp2 = rand() % 10;
                                value_gold -= temp3 = rand() % 50;
                                cout << "学而时习之，不亦说乎？" << endl;
                                cout << "智力+" << temp1 << "\t气质+" << temp2 << "\t金币-" << temp3 << endl;
                                break;
                            case 3://学习礼法 +魅力 +气质 -金币
                                value_array_baseinfo[2] += temp1 = rand() % 10;
                                value_array_baseinfo[4] += temp2 = rand() % 10;
                                value_gold -= temp3 = rand() % 50;
                                cout << "礼，天之经也，民之行也。" << endl;
                                cout << "魅力+" << temp1 << "\t气质+" << temp2 << "\t金币-" << temp3 << endl;
                                break;
                            case 4://出城修行 +体力 +道德 -金币
                                value_array_baseinfo[0] += temp1 = rand() % 10;
                                value_array_baseinfo[3] += temp2 = rand() % 10;
                                value_gold -= temp3 = rand() % 50;
                                cout << "心存善念，福报无量！" << endl;
                                cout << "体力+" << temp1 << "\t道德+" << temp2 << "\t金币-" << temp3 << endl;
                                break;
                            case 5:
                                value_gold += temp3 = rand() % 100;
                                cout << "通过努力获得" << temp3 << "金币！" << endl;
                                break;
                            default:
                                break;
                            }
                        }
                    month++;
                    break;
                }
                // case 3:
                //     break;
                // case 4:
                //     break;                    
                case 0:
                {
                    return 0;
                }
                default:
                {
                    cout << "选择错误，请重新选择：" << endl;
                    goto ag;
                    break;
                }
            }
        }
    }
    //根据各项参数，判定游戏结果
    /**
     * 女王   属性总和2000以上
     * 王妃   属性总和1800-2000
     * 将军   属性总和1600-1800
     * 骑士   属性总和1200-1600 且体力最高
     * 军师   属性总和1200-1600 且智力最高
     * 宠妃   属性总和1200-1600 且魅力最高
     * 祭祀   属性总和1200-1600 且道德最高
     * 仙子   属性总和1200-1600 且气质最高
    */
    int sum = 0;
    for (int i = 0; i < 5;i++)
        sum += value_array_baseinfo[i];
    if(sum>=2000)
        cout << "恭喜你，登基为女王陛下！" << endl;
    else if(sum>=1800)
        cout << "恭喜你，成为王妃殿下！" << endl;
    else if(sum>=1600)
        cout << "恭喜你，成为大将军！" << endl;
    else if(sum>=1200)
    {
        int max = value_array_baseinfo[0];
        int maxindex = 0;
        for (int j = 1; j < 5; j++)
        {
            if(value_array_baseinfo[j]>max)
            {
                max = value_array_baseinfo[j];
                maxindex = j;
            }
        }
        switch(maxindex)
        {
            case 0://体力最高
                cout << "恭喜你，成为一名优秀的骑士！" << endl;
                break;
            case 1://智力最高
                cout << "恭喜你，成为一名优秀的军师！" << endl;
                break;
            case 2://魅力最高
                cout << "恭喜你，成为宠妃！" << endl;
                break;
            case 3://道德最高
                cout << "恭喜你，成为大祭司！" << endl;
                break;
            case 4://气质最高
                cout << "恭喜你，成为不食人间烟火的仙子！" << endl;
                break;
            }
    }
    else
        cout << "属性总和为：" << sum << "，很遗憾，再接再厉吧！" << endl;

    return 0;
}